from dataclasses import dataclass
from abc import ABC

@dataclass
class ConfigItem:
    description: str
    value:str|int|float|bool


@dataclass
class Config(ABC):
    """
    配置类
    默认配置
    """
    api_url: str = None
    api_key: str = None
    model: str = None
    temperature: float = 0.7
    max_tokens: int = 1024
    top_p: int = 1
    show_token_usage: bool = False
    mailTo: str = None
    prompt_file: str = None
    output_file: str = None
    system_prompt: str = '你是一个专业的助手,默认使用中文回答'
    stream: bool = False
    verbose: bool = False
    config_file_path: str = 'askai.conf'

@dataclass
class ConfigDescription(Config):
    """config配置的描述

    Args:
        Config (ABC): 父类接口
    """    
    api_key: str = '在ai平台获取的api_key'
    api_url: str = '在ai平台获取的api_url'
    model: str = '模型名字'
    temperature: str = '模型温度,值越高给出的答案越有创造性,反之给出的答案更严谨'
    max_tokens: str = '模型生成的最大长度'
    system_prompt: str = '系统提示词,描述对话设定'
    top_p: str = '模型生成概率,值越高给出的答案越有创造性,反之给出的答案更严谨'
    mailTo: str = '结果作为邮件发送的收件人地址'
    output_file: str = '结果保存到文件的地址'
    prompt_file: str = '文件作为提示词输入的地址'
    show_token_usage:str='是否显示token使用情况'
    stream:str='是否流式输出结果'
    verbose:str='是否显示详细日志'
    config_file_path: str = '配置文件的地址'
    prompt:str = '提示词'


config_dict_template={'api_url':'',
             'api_key':'',
             'model':'gpt-3.5-turbo',
             'stream':False,
             'temperature':0.7,
             'max_tokens':1024,
             'top_p':1,
             'show_token_usage':False}
